<html>
				<head>
				<meta http-equiv="content-type" content="text/html; charset=UTF-8">
				</head>
				<body><pre>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.freebsd.org/cgi/man.cgi?query=ACCESS&sektion=2&apropos=0&manpath=FreeBSD+6.1-RELEASE">ACCESS(2)</a> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FreeBSD System Calls Manual&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <a href="http://www.freebsd.org/cgi/man.cgi?query=ACCESS&sektion=2&apropos=0&manpath=FreeBSD+6.1-RELEASE">ACCESS(2)</a></pre>
<pre>
<b>名称</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;access, eaccess -- 检查文件是否可访问</pre>
<pre>
<b>库</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Standard C Library (libc, -lc)</pre>
<pre>
<b>概要</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#include &lt;<font color="dark">unistd.h</font>&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="red">int</font> <font color="blue">access</font>(<font color="red">const char *</font> <font color="green">path</font>, <font color="red">int</font> <font color="green">mode</font>); 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="red">int</font> <font color="blue">eaccess</font>(<font color="red">const char *</font> <font color="green">path</font>, <font color="red">int</font> <font color="green">mode</font>);</pre>
<pre>
<b>详述</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>access()</font>和<font color=blue>eaccess()</font>系统调用将检查是否有权限按<font color="green"><font color="green">mode</font></font>方式访问<font color="green"><font color="green">path</font></font>文件。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="green"><font color="green">mode</font></font>可以为 F_OK（检查文件／目录是否存在）或为一般性检查，可以按或组合下列值：
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R_OK 是否可读
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;W_OK 是否可写
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;X_OK 是否可执行（文件）／可搜索（目录）
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;更多的信息请参阅<a href="http://www.freebsd.org/cgi/man.cgi?query=intro&sektion=2&apropos=0&manpath=FreeBSD+6.1-RELEASE">intro(2)</a>的<font color=green><i>文件访问权限</i></font>一节。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>eaccess()</font>系统调用使用有效用户ID和组列表进行申请访问权限，<font color=blue>access()</font>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统调用使用实际用户ID（而不是有效用户ID）和实际组ID（而不是有效组ID）
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;及组列表中的其它组ID。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当进程的实际用户ID或有效用户ID具有某些特权时，即使文件没有设置X_OK/W_OK/R_OK，
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;系统调用仍然成功返回。</pre>
<pre>
<b>返回值</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;成功时返回<u>0</u>，否则返回<u>-1</u>并且设置全局变量<font color=green>errno</font>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;为对应的错误代码。</pre>
<pre>
<b>错误</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>access()</font>失败时将设置errno为下列错误常量：
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ENOTDIR]		<font color="green"><font color="green">path</font></font>中的某目录组分不是目录
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ENAMETOOLONG]		<font color="green"><font color="green">path</font></font>中的某目录组分超过255字节或<font color="green"><font color="green">path</font></font>超过1023字节
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ENOENT]		文件不存在
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ELOOP]			转换路径时遇到了太多的符号链接
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[EROFS]			试图在只读文件系统上请求写操作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[ETXTBSY]		试图对执行中的文件请求写操作
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[EACCES]		对文件按<font color="green"><font color="green">mode</font></font>方式的请求被拒绝，或者<font color="green"><font color="green">path</font></font>中某目录组分不允许搜索。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[EFAULT]		<font color="green"><font color="green">path</font></font>参数指向的地址超出了进程的存取空间
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[EIO]			读／写文件系统时遇到了I/O错误</pre>
<pre>
<b>安全</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>access()</font>系统调用由于<font color=red>存在安全漏洞（竞态条件）</font>，不应该再使用它。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;设置用户ID和设置组ID的程序应当在设置后恢复其有效用户／组ID，
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;且应该直接访问文件，而不是通过<font color=blue>access()</font>模拟检查实际用户ID／组ID。
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;若使用不当，<font color=blue>eaccess()</font>系统调用同样会被拒绝参与竞态。</pre>
<pre>
<b>参见</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="http://www.freebsd.org/cgi/man.cgi?query=chmod&sektion=2&apropos=0&manpath=FreeBSD+6.1-RELEASE">chmod(2)</a>, <a href="http://www.freebsd.org/cgi/man.cgi?query=intro&sektion=2&apropos=0&manpath=FreeBSD+6.1-RELEASE">intro(2)</a>, <a href="http://www.freebsd.org/cgi/man.cgi?query=stat&sektion=2&apropos=0&manpath=FreeBSD+6.1-RELEASE">stat(2)</a></pre>
<pre>
<b>标准</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>access()</font>系统调用应当遵循ISO/IEC 9945-1:1990(``POSIX.1'')标准。</pre>
<pre>
<b>历史</b>:
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color=blue>access()</font>系统调用在AT&T UNIX版本7里首次出现。</pre>
</pre>
</body></html>